package com.ruoyi.system.service;

import java.util.Map;

/**
 * Token服务接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface ISysTokenService 
{
    /**
     * 从指定API获取Token
     * 
     * @param username 用户名
     * @param password 密码
     * @param apiUrl 接口地址
     * @return Token字符串
     * @throws Exception 获取失败时抛出异常
     */
    public String getTokenFromApi(String username, String password, String apiUrl) throws Exception;
    
    /**
     * 从指定API获取Token并缓存到Redis
     * 
     * @param username 用户名
     * @param password 密码
     * @param apiUrl 接口地址
     * @return 包含token和过期时间的Map
     * @throws Exception 获取失败时抛出异常
     */
    public Map<String, Object> getTokenWithCache(String username, String password, String apiUrl) throws Exception;
    
    /**
     * 从Redis获取缓存的Token信息
     * 
     * @param username 用户名
     * @param apiUrl 接口地址
     * @return 包含token和剩余过期时间的Map，如果不存在则返回null
     */
    public Map<String, Object> getCachedToken(String username, String apiUrl);
    
    /**
     * 清空所有Token缓存
     * 
     * @return 清空结果
     */
    public boolean clearAllTokenCache();
    
    /**
     * 清空指定用户的Token缓存
     * 
     * @param username 用户名
     * @param apiUrl 接口地址
     * @return 清空结果
     */
    public boolean clearTokenCache(String username, String apiUrl);
    
    /**
     * 重新获取Token并刷新缓存
     * 
     * @param username 用户名
     * @param password 密码
     * @param apiUrl 接口地址
     * @return 包含新token和过期时间的Map
     * @throws Exception 获取失败时抛出异常
     */
    public Map<String, Object> refreshTokenCache(String username, String password, String apiUrl) throws Exception;
}